package com.springboot.study.controller;
import com.springboot.study.pojo.UserInfo;
import com.springboot.study.Repository.UserInfoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

/**
 * UserInfo 控制器，提供 CRUD 接口
 *
 * 通过 @RestController 和 @RequestMapping("/users")，接口统一在 /users 路径下。
 * 使用标准的 HTTP 方法：
 * GET /users — 查询所有用户
 * GET /users/{id} — 根据ID查询用户
 * POST /users — 新增用户
 * PUT /users/{id} — 更新用户（这里是全量更新）
 * DELETE /users/{id} — 删除用户
 * 对查不到的用户，返回 404 Not Found。
 * 使用 ResponseEntity 更好控制 HTTP 响应状态码。
 *
 */
@RestController
@RequestMapping("/usersinfo")
public class UserInfoController {

    @Autowired
    private UserInfoRepository userInfoRepository;

    // 查询所有用户
    @GetMapping
    public List<UserInfo> getAllUsers() {
        return userInfoRepository.findAll();
    }

    // 根据ID查询用户
    @GetMapping("/{id}")
    public ResponseEntity<UserInfo> getUserById(@PathVariable Long id) {
        Optional<UserInfo> user = userInfoRepository.findById(id);
        if (user.isPresent()) {
            return ResponseEntity.ok(user.get());
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    // 新增用户
    @PostMapping
    public UserInfo createUser(@RequestBody UserInfo userInfo) {
        return userInfoRepository.save(userInfo);
    }

    // 更新用户（全量更新）
    @PutMapping("/{id}")
    public ResponseEntity<UserInfo> updateUser(@PathVariable Long id, @RequestBody UserInfo userDetails) {
        Optional<UserInfo> optionalUser = userInfoRepository.findById(id);
        if (!optionalUser.isPresent()) {
            return ResponseEntity.notFound().build();
        }
        UserInfo user = optionalUser.get();
        user.setUsername(userDetails.getUsername());
        user.setPassword(userDetails.getPassword());
        user.setEmail(userDetails.getEmail());
        user.setPhone(userDetails.getPhone());

        UserInfo updatedUser = userInfoRepository.save(user);
        return ResponseEntity.ok(updatedUser);
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        if (!userInfoRepository.existsById(id)) {
            return ResponseEntity.notFound().build();
        }
        userInfoRepository.deleteById(id);
        return ResponseEntity.noContent().build();
    }
}
